CGI2000-Trabalho 1
Data de entrega: 4 de abril.
Considere o TAD (Tipo Abstrato de Dados) Image
cuja interface está definida em image.h e a implementação em image.c (ambos
disponíveis na web pelos seus respectivos links). Desenvolva e implemente o
método
Image *imgReduceTo256(Image *img);
que retorna o ponteiro de uma nova imagem que aproxima a imagem original, img, com a mesma resolução espacial mas com apenas 256 cores
distintas.
Critério de correção deste trabalho (em ordem de importância):
- Qualidade da imagem gerada medida através da distancia entre a cor dos pixels correspondentes
da imagem original (R,G,B) e da aproximada (R',G',B').
Como medida de erro de cada pixel será adotada a seguinte formula:
erro = 0.6*|Y-Y'| + 0.2*|Cb-Cb'| + 0.2*|Cr-Cr'|
onde:
Y = 0.29900 * R + 0.58700 * G + 0.11400 * B;
Cb = -0.16874 * R - 0.33126 * G + 0.50000 * B + 128;
Cr = 0.50000 * R - 0.41869 * G - 0.08131 * B + 128;
Todas as componentes de cor R,G,B,Y,Cb e Cr tomam valores no intervalo [0,255].
- Eficiência (tempo de excecução) da quantização.
- Qualidade do código.
- Prazo de entrega. Após 4abr2000 este critério se torna o mais relevante de todos.
Mateiral de apoio para o trabalho:
Exemplos de imagens ppm: leão, navios, bolas e avião.
Exemplo de uso do TAD Image: teste.c
Um arquivo zip
com o essencial para fazer o trabalho.
Um programa
para auxiliar na correção do trabalho.
Obs: A tansformada inversa (YCbCr para RGB) é dada por:
R = Y + 1.40200 * (Cr - 128) ;
G = Y - 0.34414 * (Cb - 128 ) - 0.71414 * (Cr-128) ;
B = Y + 1.77200 * (Cb - 128) ;
Dica para medir tempo: (time.c)
última atualização: 3 de abril 2000 - gattass